\chapter{Железо}
\pagenumbering{arabic}


\section{Как создать ramdisk в Linux}
В ядре должна быть поддержка tmpfs. Быстренько создаём новую точку монтирования:

\begin{lstlisting}
# mkdir /mnt/tmpfs/
# chmod 777 /mnt/tmpfs/
\end{lstlisting}

и даём все права на использование. После этого даём команду (от рута или через sudo):

\begin{lstlisting}
# mount -t tmpfs -o size=xxxM tmpfs /mnt/tmpfs/
\end{lstlisting}

где \textbf{xxxM} есть размер RAMdisk в Мегабайтах.

Если же вы хотите изменить размер ramdisk - это просто:

\begin{lstlisting}
# mount -o remount -o size=yyyM /mnt/tmpfs/
\end{lstlisting}

При этом содержимое диска не пропадёт, но его размер тут же увеличится (при уменьшении также ничего не пропадёт, если только данных не больше, чем диск).



\section{Запись CD и DVD дисков в Linux}
Приводятся только основные команды и параметры утилит.

\subsection{Как узнать адрес привода}
Запись на привод проводится через ATAPI, а не эмуляцию SCSI, как когда-то делали. Для этого пишем в консольке:

\begin{lstlisting}
$ sudo cdrecord -scanbus dev=ATAPI
\end{lstlisting}

Выдаст он нам что-то вроде:

\begin{lstlisting}
Cdrecord-Clone 2.01.01a01 (i686-pc-linux-gnu) Copyright (C) 1995-2004 Joerg Schilling
'@(#)scsitransp.c 1.91 04/06/17 Copyright 1988,1995,2000-2004 J. Schilling').
scsibus0:
0,0,0 0) '_NEC ' 'DVD_RW ND-3550A ' '1.05' Removable CD-ROM
0,1,0 1) *
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) * 
\end{lstlisting}

Выделенная полужирным строка - это и есть наш привод, а цифры 0,0,0 - его адрес, который и подставляем в качестве цели для записи диска через ATAPI. Но об этом ниже.

\subsection{Запись CD-R/RW дисков}
Для этого нужно установить либо сторонние пакеты cdrtools, либо пакты из Etch, которые называются cdrkit (свободная версия cdrtools). Тогда в вашем распоряжении окажутся утилиты cdrecord для записи/очистки дисков, mkisofs для создания ISO-образов из файлов, cdda2wav для сдирания с образа аудиотреков. 

\subsubsection{Создание ISO-образа}
Если нужно создать сперва ISO-образ для пропаливания, пользуемся утилитой mkisofs. Если нужны длинные имена файлов и русские их названия, то включаем расширение Joliet. Короче говоря, чтобы из каталога /home/vasya/stuff сделать iso-образ под названием disk.iso, пишем в консольке следующее:

\begin{lstlisting}
$ mkisofs -joliet-long -r -o disk.iso /home/vasya/stuff
\end{lstlisting}

После этого в каталоге, из которого вызывалась программа, появится disk.iso, который теперь можно пропаливать на болванку.

\subsection{Запись CD-R дисков}
Если уже есть ISO-образ и его надо просто пропалить, то надо вызвать cdrecord и указать ему скорость пропаливания, адрес устройства и непосредственно сам образ. Делается это так:

\begin{lstlisting}
$ cdrecord -v speed=40 dev=ATAPI:0,0,0 my.iso
\end{lstlisting}

То есть записать с подробным выводом сообщений на скорости 40 на устройство ATAPI:0,0,0, (Primary Master 1-ого IDE-канала) образ my.iso - всё логично и понятно. Пока пропаливается диск - сворачиваем окошко консоли и занимаемся другими делами.


\subsection{Запись CD-RW дисков в Linux}
Для того, чтобы очистить болванку, есть несколько методов, реализованных в cdrecord: быстрая очистка, только указанная сессия, полная очистка и другие. Например, для быстрой очистки пишем:

\begin{lstlisting}
$ cdrecord -v blank=fast dev=ATAPI:0,0,0
\end{lstlisting}

и через пару секунд на него уже можно писать новые данные.
Запись CD-RW дисков ничем не отличается от записи обычных однократных болванок, и команда:

\begin{lstlisting}
$ cdrecord -v speed=40 dev=ATAPI:0,0,0 my.iso
\end{lstlisting}

пропаливает диск точно так же. Только следите за указанием скорости пропаливания - для перезаписываемых болванок она ниже, чем для однократных.



\subsection{Запись DVD-R/RW дисков}
Для этого нужно поставить утилиты dvd+rw-tools, после чего в нашем распоряжении будет growisofs для создания и записи образов на DVD, а так же dvd+rw-format для предварительного форматирования перезаписываемых DVD+RW.

\subsubsection{Запись DVD-/+R дисков в Linux}
Для этого нам потребуется утилита growisofs, которая входит к комплект dvd+rw-tools, и объединяющая в себе mkisofs и cdrecord в одном флаконе. Для того, чтобы пропалить на DVD-болванку (без разницы - это DVD+R или DVD-R) файлы из каталога /home/vasya/something, пишем в консольке:

\begin{lstlisting}
$ growisofs -Z /dev/cdrom -R -J /home/vasya/something
\end{lstlisting}

где после -Z идёт устройство, которое является резаком. Даже если оно называет /dev/cdrom, не надо удивляться: утилите всё равно. Если уж так хочется прожечь болванку побыстрее, можно рекомендовать growispfs скорость ключом -speed=N так:

\begin{lstlisting}
$ growisofs -speed=8 -Z /dev/cdrom -R -J /home/vasya/something
\end{lstlisting}

Помним, что для DVD скорость 1х = 1385 Кб/сек.
Если нужно пропалить уже готовый ISO-образ, команда изменится так:

\begin{lstlisting}
$ growisofs -Z /dev/cdrom=image.iso
\end{lstlisting}

В процессе записи будет постоянно выводиться информация о текущей скорости записи, прогрессе и оставшемся до конца пропаливания времени.


\subsection{Запись DVD-/+RW дисков}
Для начала болванку нужно отформатировать, это делается так:
% I hate those \verbX text X ! (imposeren)
\begin{lstlisting}
# dvd+rw-format -f /dev/cdrom
\end{lstlisting}

Если у вас другое устройство для записи, отличное от /dev/cdrom, замените его на своё. После этого запись на диск идёт так же, как и для обычных DVD-болванок:

\begin{lstlisting}
# growisofs -Z /dev/cdrom=image.iso
\end{lstlisting}

После этого начнётся запись, а мы можем заняться чем-то более полезным, чем созерцание процентов записываемого образа.

\subsubsection{Возможность использования DVD-/+RW как дискеты}
Есть возможность использования пакетной записи и файловой системы udf (должна быть скомпилирована поддержка ядре), чтобы работать с перезаписываемым DVD-диском как с большой дискетой. Как мне любезно написал в комментариях ув.тов. Anonymous, выглядит это так:

\begin{lstlisting}
# dvd+rw-format -f /dev/cdrom
# mkudffs /dev/cdrom
\end{lstlisting}

    После чего работаем как с простым RW сменным носителем типа дискетки или флешки:

\begin{lstlisting}
# mount -t udf /dev/cdrom /mnt/cdrom
# cp /etc/* /mnt/cdrom/
# rm /mnt/cdrom/shadow
# eject
\end{lstlisting}



\section{Проверка правильности записи на CD и DVD диск}
Утилита dd входит в состав любого дистрибутива и является чрезвычайно полезной во многих случаях.

\subsection{Для CD-дисков}
Вставляем пропаленный диск, и, не монтируя его, пишем в консольке:
\begin{lstlisting}
# dd if=/dev/cdrom | md5sum
\end{lstlisting}

После этого видим:
\begin{lstlisting}
# dd if=/dev/cdrom bs=2048 | md5sum
355562+0 %входных записей%
355562+0 %выходных записей%

728190976 bytes transferred in 
299,413377 seconds (2432059 bytes/sec)

e941bb0ecac20a2043c9f8e69fbab63a -
\end{lstlisting}

\subsection{Для DVD-дисков}
При записи на DVD пишется так же и служебная информация, поэтому для проверки DVD-дисков утилитой dd нужно точно указывать размер и количество блоков. Для того, чтобы узнать, сколько значимых блоков (extents) имеется в iso-образе, выполняем:
\begin{lstlisting}
$ echo $(( $(ls -l my.iso | awk '{ print $5 }') / 2048 ))
\end{lstlisting}

Результатом будет число блоков:

\begin{lstlisting}
169383
\end{lstlisting}

Теперь, зная, что размер блока равен 2048 байт и количество блоков на DVD-диске, даём команду:
\begin{lstlisting}
$ dd if=/dev/cdrom bs=2048 count=169383 | md5sum
\end{lstlisting}
Результатом её выполнения будет вывод:
\begin{lstlisting}
$ dd if=/dev/cdrom bs=2048 count=169383 | md5sum 
169383+0 records in
169383+0 records out
e941bb0ecac20a2043c9f8e69fbab63a -
\end{lstlisting}

Как видно, что записанный на DVD образ и isoшник на жёстком диске совпадают, так что запись прошла успешно.


\section{Ошибки при записи DVD и как с ними бороться}
Случается, что при записи DVD-дисков возникают ошибки. Обычно при этом болванка выбрасывается, однако есть способы некоторые ошибки исправить и записать-таки диск. 

\subsection{Сбой в процессе записи в начале или середине диска}
В начале или середине диски запись обрывается и growisofs выдаёт сообщение

\begin{lstlisting}
Executing 'builtin_dd if=1.iso of=/dev/cdrom obs=32k seek=0'
/dev/cdrom: "Current Write Speed" is 16.4x1352KBps.
0/4393730048 ( 0.0%) @0x, remaining ??:?? RBU 100.0% UBU 0.0%
0/4393730048 ( 0.0%) @0x, remaining ??:?? RBU 100.0% UBU 0.0%
0/4393730048 ( 0.0%) @0x, remaining ??:?? RBU 100.0% UBU 0.0%
0/4393730048 ( 0.0%) @0x, remaining ??:?? RBU 100.0% UBU 0.0%
0/4393730048 ( 0.0%) @0x, remaining ??:?? RBU 100.0% UBU 0.0%
1671168/4393730048 ( 0.0%) @0.4x, 
remaining 1007:27 RBU 100.0% UBU 1.9%
:-[ WRITE@LBA=330h failed with SK=3h/ASC=0Ch/ACQ=00h]: 
Input/output error
:-( write failed: Input/output error
/dev/cdrom: flushing cache
/dev/cdrom: closing track
:-[ CLOSE TRACK failed with SK=3h/ASC=0Ch/ACQ=00h]: 
Input/output error
/dev/cdrom: closing session
/dev/cdrom: reloading tray
\end{lstlisting}

Болванку выбрасывать не надо, а только запустить процесс ещё раз - диск будет продолжен с того места, где запись прервалась. После этого диск нормально читается и проходит проверку на MD5-суммы.

\subsection{Ошибка закрытия сессии}
Диск полностью записался, и начинается закрытие сессии - иногда здесь происходит ошибка:

\begin{lstlisting}
2144544*2KB out @ average 9.9x1352KBps
/dev/cdrom: flushing cache
/dev/cdrom: closing track
/dev/cdrom: closing session
:-[ CLOSE SESSION failed with SK=5h/ASC=72h/ACQ=03h]: 
Input/output error
\end{lstlisting}
% % Лицензия на материалы этого текст
% 
% Материалы сайта "Записки дебианщика" написаны virens и доступны на условиях лицензии Creative Commons Attribution-Non-Commercial-Share Alike 3.0 Unported License. Вы можете копировать, распространять, показывать эту работу, и создавать производные работы в некоммерческих целях на условиях:
% 
% 1) обязательной ссылки на автора (virens, http://mydebianblog.blogspot.com/) и
% 
% 2) распространении любых производных работ на условиях этой же лицензии (ссылка на эту лицензию 
% обязательна!).
% 
% Пожалуйста соблюдайте условия лицензии.
% 
% This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. 
Обидно: диск-то записался, но читаться он не будет, так как не закрыта сессия.

Для этого есть фирменная "затычка" от авторов \\dvd+rw-tools: небольшая программа close, и нужен её исходник. Его нужно скачать отсюда, установить/скачать исходные коды dvd+rw-tools и скопировать close.cpp в каталог с исходниками dvd+rw-tools. После этого в каталоге с исходниками компилируем close.cpp командой:

\begin{lstlisting}
$ g++ -o close close.cpp
\end{lstlisting}

Всё, даём ей права на исполнение, вставляем в привод диск с неудачно закрытой сессией и пишем:

\begin{lstlisting}
# close /dev/hda
\end{lstlisting}

Если /dev/hda ваш пишущий DVD-привод, конечно. После этого диск будет закрыт, его можно прочесть и он проходит проверку MD5-сумм.

Так же для закрытия сессии можно использовать команду

\begin{lstlisting}
# dvd+rw-format -lead-out /dev/scdN
\end{lstlisting}

Должно работать и для обычных DVD-R дисков.


\section{Как узнать подробности оборудования в Linux?}
Часто, особенно при настройке нового оборудования в Linux или решения проблем со старым, требуется знать подробности об устройстве: фирма-изготовитель, марка и другие опознавательные знаки устройства. 

\subsection{lspci}
Весьма распространённая проблема на ноутбуках - кардридеры от дядюшки Ляо, к которым даже не знаешь, как подступиться. В консоли от простого пользователя пишем:

\begin{lstlisting}
# lspci
\end{lstlisting}

В результате будет выведена информация об устройствах, подключённых к шине PCI, как и следует из названия утилиты. 

Теперь есть довольно подробная информация об устройстве, которая структурирована так:

\begin{lstlisting}
01:03.2 Generic system peripheral 
[0805]: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro 
Host Adapter (rev 17)
\end{lstlisting}

Идентификатор (Device ID), Класс (Class), Производитель (Vendor), Наименование устройства (Device), Ревизия (Revision).

Можно получить дополнительную информацию по устройству, которая может быть иногда полезна при устранении проблем с работой оборудования. Для этого нужно воспользоваться подробным (verbose) режимом работы программы:

\begin{lstlisting}
# lspci -v
\end{lstlisting}

Вывод будет очень длинным, но то, что относится к рассматриваемому в примере устройству, будет выглядеть так:

\begin{lstlisting}
01:03.2 Generic system peripheral [0805]: 
Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 17)
Subsystem: ASUSTeK Computer Inc. Unknown device 1997
Flags: bus master, medium devsel, latency 64, IRQ 21
Memory at fe8fe400 (32-bit, non-prefetchable) [size=256]
Capabilities: [80] Power Management version 2
\end{lstlisting}

Отсюда можно узнать, например, номер IRQ, на котором висит устройство.


\subsection{Устройства с подключением по USB}
Аналогичная команда есть и для USB-устройств, что тоже весьма полезно, например, при подключении USB-IR или USB-Bluetooth устройств. Так вы узнаете точную марку устройства:

\begin{lstlisting}
# lsusb
\end{lstlisting}

Результат:

\begin{lstlisting}
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 003: ID 0a12:0001 Cambridge 
Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 002: ID 046d:c03e Logitech, 
Inc. Premium Optical Wheel Mouse
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
\end{lstlisting}

Можно так же заметить, что помимо синезубого адаптера, сейчас подключена ещё и оптическая мышка с колёсиком от Logitech.

\subsection{Расширенная информация: lshw}
Эта утилита по умолчанию, как правило, не устанавливается, но в репозиториях она должна быть (есть в Дебиане 4 ставится при помощи aptitude install lshw). Утилита lshw выводит структурированный список оборудования вместе с информацией об устройствах. Например, простой запуск от пользователя:
\begin{lstlisting}
# lshw
\end{lstlisting}
даёт много пищи для размышлений:

\begin{lstlisting}
notebeast
description: Computer
width: 32 bits
*-core
description: Motherboard
physical id: 0
*-memory
description: System memory
physical id: 0
size: 495MB
*-cpu
product: Intel(R) Pentium(R) M processor 1.73GHz
vendor: Intel Corp.
physical id: 1
bus info: cpu@0
version: 6.13.8
size: 1729MHz
capacity: 1729MHz
width: 32 bits
capabilities: fpu fpu_exception wp vme 
de pse tsc msr pae mce cx8 apic sep mtrr 
pge mca cmov pat clflush dts acpi mmx 
fxsr sse sse2 ss tm pbe nx est tm2 cpufreq
*-pci
description: Host bridge
product: Mobile 915GM/PM/GMS/910GML 
Express Processor to DRAM Controller
vendor: Intel Corporation
physical id: 100
bus info: pci@00:00.0
version: 04
width: 32 bits
clock: 33MHz
*-display:0
description: VGA compatible controller
product: Mobile 915GM/GMS/910GML 
Express Graphics Controller
vendor: Intel Corporation
physical id: 2
bus info: pci@00:02.0
version: 04
size: 256MB
width: 32 bits
clock: 33MHz
%\%%capabilities: vga bus_master cap_list
configuration: latency=0
<...>
\end{lstlisting}

Список длинный, поэтому приведена только часть. Очень полезно для анализа оборудования.

\subsection{Ищем сведения об устройстве с помощью dmesg в Linux}
Эта команда предоставляет доступ к логам ядра - того, что происходило при загрузке и того, что происходит в процессе работы. При загрузке устройства инициализируются и опознаются системой, и если что-то идёт не так, в логах обязательно это будет отражено.

Лог dmesg как правило очень длинный и изобилует подробностями работы с оборудованием. Читать его полностью довольно утомительно, поэтому стоит воспользоваться потоковой утилитой поиска grep. Например, чтобы узнать подробности о процессоре, нужно написать:

\begin{lstlisting}
# dmesg | grep CPU

SLUB: Genslabs=22, HWalign=64, Order=0-1, 
MinObjects=4, CPUs=1, Nodes=1
CPU: After generic identify, caps: 
afe9fbff 00100000 00000000 00000000 
00000180 00000000 00000000
CPU: L1 I cache: 32K, L1 D cache: 32K
CPU: L2 cache: 2048K
CPU: After all inits, caps: afe9fbff 
00100000 00000000 00002040 00000180 
00000000 00000000
%\%% Intel machine check reporting enabled on CPU#0.
CPU: Intel(R) Pentium(R) M processor 1.73GHz stepping 08
ACPI: CPU0 (power states: C1[C1] C2[C2])
ACPI: Processor [CPU1] (supports 8 throttling states)
Switched to high resolution mode on CPU 0
Use X86_ACPI_CPUFREQ (acpi-cpufreq) instead.
\end{lstlisting}

Так можно многое узнать о работе своего железа. Эта информация может пригодиться при сборке своего ядра и/или устранении проблем (последние строки dmesg содержат информацию о том, что происходило недавно с системой). Именно поэтому на форумах требуют выкладывать логи системы - это и есть исчерпывающая информация о работе вашей системы и её оборудовании.

Лог dmesg и многие другие логи хранятся в /var/log/ хотя часть из них доступна только привилегированному пользователю - пользуйтесь sudo.


\subsection{Ищем сведения об устройстве с помощью /proc в Linux}
Файловая система /proc на самом деле является "слепком" состояния системы и её переменных, там хранится множество полезных сведений о системе. Например, уровень заряда батарей ноутбука и скорости вращения вентиляторов, информация о подключённых устройствах - и многое другое.

Чтобы просмотреть файлы в директории /proc делаем так:

\begin{lstlisting}
$ ls /proc/
\end{lstlisting}

В ответ получите список файлов, в которых хранится информация о текущем состоянии системы. Например, чтобы узнать подробности о процессоре, можно написать:

\begin{lstlisting}
$ cat /proc/cpuinfo
\end{lstlisting}

В результате чего имеем весьма подробную информацию о процессоре:

\begin{lstlisting}
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 13
model name : Intel(R) Pentium(R) M processor 1.73GHz
stepping : 8
cpu MHz : 1729.000
cache size : 2048 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr 
pae mce cx8 apic sep mtrr pge mca 
cmov pat clflush dts acpi mmx fxsr 
sse sse2 ss tm pbe nx est tm2
bogomips : 3459.64
clflush size : 64
\end{lstlisting}


Здесь же, в каталоге /proc, хранятся и обновляются сведения о скоростях вращения вентиляторов, заряде батарей и прочих ACPIшных радостях (если оные поддерживаются для вашего оборудования ядром). Вот, к примеру, как можно узнать состояние батарей ноутбука:
 
\begin{lstlisting}
$ cat /proc/acpi/battery/BAT0/info
\end{lstlisting}

Отсюда берут данные все графические утилиты мониторинга, типа \verb+klaptop_check+ (в KDE висит в трее и показывает состояние батареи). Вот что там имеется:

\begin{lstlisting}
present: yes
design capacity: 50600 mWh
last full capacity: 51381 mWh
battery technology: rechargeable
design voltage: 11100 mV
design capacity warning: 5060 mWh
design capacity low: 2530 mWh
capacity granularity 1: 506 mWh
capacity granularity 2: 506 mWh
model number: S5-2P24
serial number:
battery type: LIon
OEM info: ASUSTEK
\end{lstlisting}

Как видно, весьма полезная, и главное - постоянно обновляемая информация.


\subsection{Ищем сведения о жёстком диске в Linux}
Сведения о ёмкости и геометрии винчестера можно получить при помощи fdisk, запущенном от рута или через sudo:

\begin{lstlisting}
# fdisk -l /dev/hda 
\end{lstlisting}


\begin{lstlisting}
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 36 289138+ 82 Linux swap / Solaris
/dev/hda2 * 37 7296 58315950 83 Linux
\end{lstlisting}

Если требуется получить более глубокие сведения о возможностях винчестера, например о поддержке им DMA или S.M.A.R.T, потребуется утилита hdparm, включённая в состав (почти?) всех современных дистрибутивов. Она так же требует рутовых полномочий, и обращаться с ней нужно весьма осторожно (использование параметров без чёткого понимания того, что вы делаете, может привести к потере данных). Так, например, можно запросить информацию о винчестере и его возможностях:

\begin{lstlisting}
$ sudo hdparm -I /dev/hda

/dev/hda:

ATA device, with non-removable media
Model Number: HTS421260H9AT00
Serial Number: HKA210AJGKHV1B
Firmware Revision: HA2OA70G
Standards:
Used: ATA/ATAPI-7 T13 1532D revision 1
Supported: 7 6 5 4
Configuration:
Logical max current
cylinders 16383 65535
heads 16 1
sectors/track 63 63
--
CHS current addressable sectors: 4128705
LBA user addressable sectors: 117210240
LBA48 user addressable sectors: 117210240
device size with M = 1024*1024: 57231 MBytes
device size with M = 1000*1000: 60011 MBytes (60 GB)
Capabilities:
LBA, IORDY(can be disabled)
Standby timer values: spec'd by Vendor, no device specific minimum
R/W multiple sector transfer: Max = 16 Current = 16
Advanced power management level: 128 (0x80)
Recommended acoustic management value: 128, current value: 254
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=240ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* SMART feature set
Security Mode feature set
* Power Management feature set
* Write cache
* Look-ahead
* Host Protected Area feature set
* WRITE_BUFFER command
* READ_BUFFER command
* NOP cmd
* DOWNLOAD_MICROCODE
* Advanced Power Management feature set
Power-Up In Standby feature set
* SET_FEATURES required to spinup after power up
Address Offset Reserved Area Boot
SET_MAX security extension
* Automatic Acoustic Management feature set
* 48-bit Address feature set
* Device Configuration Overlay feature set
* Mandatory FLUSH_CACHE
* FLUSH_CACHE_EXT
* SMART error logging
* SMART self-test
* General Purpose Logging feature set
* WRITE_{DMA|MULTIPLE}_FUA_EXT
* 64-bit World wide name
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
46min for SECURITY ERASE UNIT.
HW reset results:
CBLID- above Vih
Device num = 0 determined by the jumper
Checksum: correct
\end{lstlisting}

Здесь можно видеть не только размер и геометрию винчестера, но и то, что DMA для диска активирован (стоит udma5) и возможности S.M.A.R.T (самотестирование) поддерживается.

Так же можно узнать о состоянии винчестера при помощи утилит hddtemp и smartctl. Например, текущую температуру винчестера можно узнать так:
\begin{lstlisting}
# hddtemp /dev/hda

/dev/hda: HTS421260H9AT00: 33%\textcelsius%
\end{lstlisting}

Возможный выход винчестера из строя помогает засечь команда smartctl, с помощью которой можно протестировать жёсткий диск:

\begin{lstlisting}
# smartctl -a /dev/hda
\end{lstlisting}

Диагностический вывод здесь тоже весьма подробный, вот только часть:

\begin{lstlisting}
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE 
UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000b 100 100 062 Pre-fail Always - 0
2 Throughput_Performance 0x0005 100 100 040 Pre-fail Offline - 0
3 Spin_Up_Time 0x0007 206 206 033 Pre-fail Always - 2
4 Start_Stop_Count 0x0012 099 099 000 Old_age Always - 1719
5 Reallocated_Sector_Ct 0x0033 100 100 005 Pre-fail Always - 0
7 Seek_Error_Rate 0x000b 100 100 067 Pre-fail Always - 0
8 Seek_Time_Performance 0x0005 100 100 040 Pre-fail Offline - 0
9 Power_On_Hours 0x0012 088 088 000 Old_age Always - 5549
10 Spin_Retry_Count 0x0013 100 100 060 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 875
191 G-Sense_Error_Rate 0x000a 100 100 000 Old_age Always - 0
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 2
193 Load_Cycle_Count 0x0012 071 071 000 Old_age Always - 299291
194 Temperature_Celsius 0x0002 166 166 000 Old_age Always - 33 (Lifetime Min/Max 11/43)
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 1
197 Current_Pending_Sector 0x0022 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0008 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x000a 200 200 000 Old_age Always - 0
\end{lstlisting}


\subsection{Считываем информацию о BIOS с помощью dmidecode в Linux}
Причиной множества мелких пакостей может быть BIOS или его настройки, особенно на ноутбуках. В Линукс имеется несколько утилит для чтения информации о BIOS, например dmidecode. Здесь можно узнать о точном названии и версии BIOS, возможностях BIOS и другой интересной информации. Пишем от рута:

\begin{lstlisting}
# dmidecode
\end{lstlisting}

и в результате получаем, например, такие сведения:

\begin{lstlisting}
# dmidecode 2.8
SMBIOS 2.3 present.
34 structures occupying 1318 bytes.
Table at 0x000F8DD0.

Handle 0x0000, DMI type 0, 20 bytes
BIOS Information
Vendor: American Megatrends Inc.
Version: 0205
Release Date: 06/10/2005
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 512 kB
Characteristics:
ISA is supported
PCI is supported
PC Card (PCMCIA) is supported
PNP is supported
BIOS is upgradeable
BIOS shadowing is allowed
ESCD support is available
Boot from CD is supported
Selectable boot is supported
BIOS ROM is socketed
EDD is supported
5.25"/360 KB floppy services are supported (int 13h)
5.25"/1.2 MB floppy services are supported (int 13h)
3.5"/720 KB floppy services are supported (int 13h)
3.5"/2.88 MB floppy services are supported (int 13h)
Print screen service is supported (int 5h)
8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
CGA/mono video services are supported (int 10h)
ACPI is supported
USB legacy is supported
AGP is supported
LS-120 boot is supported
ATAPI Zip drive boot is supported
BIOS boot specification is supported
Function key-initiated network boot is supported
\end{lstlisting}

Весьма познавательно, и не нужно перезагружаться и входить в BIOS.


% \chapter{Сканеры}
\section{Настройка SANE: scanner in linux}
Если производитель не закрывает спецификаций на оборудование, то сканер должен поддерживаться и будет работать с помощью SANE - Scanner Access Now Easy.

\subsection{Установка сканера}
Нужен пакет sane и xsane. Итак, ставим:
\begin{lstlisting}
# aptitude install sane xsane 
\end{lstlisting}

Осталось поискать сканер: от рута пишем:
\begin{lstlisting}
# sane-find-scanner 
\end{lstlisting}

Эта утилита должна выдать что-то вроде:

\begin{lstlisting}
# sane-find-scanner will now attempt to detect 
# your scanner. If the result is different from 
# what you expected, first make sure your scanner 
# is powered up and properly connected to your computer.

# No SCSI scanners found. If you expected something 
# different, make sure that you have loaded a 
# SCSI driver for your SCSI adapter.

found USB scanner (vendor=0x04b8 [EPSON], 
product=0x011b [EPSON Scanner]) 
at libusb:001:089

# Your USB scanner was (probably) detected. 
# It may or may not be supported by
# SANE. Try scanimage -L and read the 
# backend's manpage.
\end{lstlisting}

Сканер опознан, нашёлся и готов радовать нас.

\subsection{Сканировать может только root?}
По умолчанию только root имеет доступ к сканеру, но это легко исправить. Для этого нужно внести пользователя, под которым хочется сканировать, в группу scanner. Делается это так:

\begin{lstlisting}
# gpasswd -a %имя\_пользователя% scanner 
\end{lstlisting}

Для того, чтобы изменения вступили в силу, нужно перелогиниться. После этого в консольке пишем:
\begin{lstlisting}
$ groups
\end{lstlisting}

При этом будет выдан список всех групп, в которых пользователь состоит. Например, вот что пишет эта утилита для меня

\begin{lstlisting}
penta4 dialout cdrom floppy audio video plugdev scanner 
\end{lstlisting}

Последняя строчка говорит о том, что пользователь penta4 имет право сканировать. 


% % Лицензия на материалы этого текст
% 
% Материалы сайта "Записки дебианщика" написаны virens и доступны на условиях лицензии Creative Commons Attribution-Non-Commercial-Share Alike 3.0 Unported License. Вы можете копировать, распространять, показывать эту работу, и создавать производные работы в некоммерческих целях на условиях:
% 
% 1) обязательной ссылки на автора (virens, http://mydebianblog.blogspot.com/) и
% 
% 2) распространении любых производных работ на условиях этой же лицензии (ссылка на эту лицензию 
% обязательна!).
% 
% Пожалуйста соблюдайте условия лицензии.
% 
% This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. 
